package com.sna.snaapplication.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;



//统一响应结果
@NoArgsConstructor//无参数的构造方法
@AllArgsConstructor//全参的构造方法
@Data
public class R<T> {
    private Integer code;//业务状态码  0-成功  1-失败
    private String message;//提示信息
    private T data;//响应数据

    //快速返回操作成功响应结果(带响应数据)
    public static <E> R<E> ok(E data) {
        return new R<>(0, "操作成功", data);
    }

    //快速返回操作成功响应结果
    public static R ok() {
        return new R(0, "操作成功", null);
    }

    public static R fail(String message) {
        return new R(1, message, null);
    }
}

/*
@NoArgsConstructor
@AllArgsConstructor
@Data
public class R<T> implements Serializable {
    private static final long serialVersionUID = 1L;

    // 定义常量
    public static final int SUCCESS = 0; // 成功状态码
    public static final int FAIL = 1;    // 失败状态码

    private int code;    // 状态码
    private String msg;  // 提示信息
    private T data;      // 响应数据

    // 快速返回操作成功响应结果（无数据）
    public static <T> R<T> ok() {
        return restResult(null, SUCCESS, "操作成功");
    }

    // 快速返回操作成功响应结果（带数据）
    public static <T> R<T> ok(T data) {
        return restResult(data, SUCCESS, "操作成功");
    }

    // 快速返回操作成功响应结果（带数据和自定义消息）
    public static <T> R<T> ok(T data, String msg) {
        return restResult(data, SUCCESS, msg);
    }

    // 快速返回操作失败响应结果（无数据）
    public static <T> R<T> fail() {
        return restResult(null, FAIL, "操作失败");
    }

    // 快速返回操作失败响应结果（带自定义消息）
    public static <T> R<T> fail(String msg) {
        return restResult(null, FAIL, msg);
    }

    // 快速返回操作失败响应结果（带数据）
    public static <T> R<T> fail(T data) {
        return restResult(data, FAIL, "操作失败");
    }

    // 快速返回操作失败响应结果（带数据和自定义消息）
    public static <T> R<T> fail(T data, String msg) {
        return restResult(data, FAIL, msg);
    }

    // 快速返回操作失败响应结果（带自定义状态码和消息）
    public static <T> R<T> fail(int code, String msg) {
        return restResult(null, code, msg);
    }

    // 内部方法，用于构建响应结果
    private static <T> R<T> restResult(T data, int code, String msg) {
        R<T> apiResult = new R<>();
        apiResult.setCode(code);
        apiResult.setData(data);
        apiResult.setMsg(msg);
        return apiResult;
    }
}*/
